home *** CD-ROM | disk | FTP | other *** search
- /* Programm zum Adressenimport */
-
- /*
- * Written 1993 by MGR, Asgard
- * © 1993 by Lars Hanke
- * contact: mgr@asgard.bo.open.de
- *
- * Bedienung:
- * Vorrausetzung: WRITE und DFA müssen beide einen AREXX Port haben
- *
- * In folgender Priorität werden Namen aus der Datei gesucht
- *
- * 1) Markierter Block
- * Der Inhalt des Markierten Blocks wird *CASEINSENSITIV*
- * mit allen Feldern der Addressdatei verglichen. Stimmt
- * er mit einem Feld überein, so wird der gefundene Name
- * und die zugehörige Stadt in einem Requester angezeigt.
- * Handelt es sich nicht um den gewünschten, so wird nach
- * dem nächsten passenden Eintrag gesucht.
- *
- * 2) Selektierter Eintrag
- * Ist im DFA Fenster ein Eintrag selektiert, aber kein
- * Block vollständig markiert, so schlägt das Skript den
- * nächsten selektierten - inklusive dem aktuellen - Eintrag
- * vor. Folgt kein selektierter Eintrag, so wird die Datei
- * vom Anfang nach selektierten Einträgen durchsucht.
- * Wird der Eintrag abgelehnt, schlägt das Skript den
- * nächsten Selektierten vor. Folgen keine weiteren, wird
- * die Suche abgebrochen.
- *
- * 3) Aktuelles Wort
- * Mit dem Cursor als Ende bis zum Wortanfang wird der Inhalt
- * eingelesen, als Block markiert und ohne führende oder
- * abschließende Leerzeichen als Fragment für eine ebenfalls
- * *CASEINSENSITIVE* Suche in allen Feldern angegeben. Danach
- * ist der Ablauf analog zu 1)
- *
- * Achtung: Die markierten Blöcke werden gelöscht, wenn die Suche
- * erfolgreich verlief.
- *
- * Die Adresse wird Anhand des COUNTRY Eintrags für das Bestimmungsland
- * formattiert. Bislang werden folgende Staaten erkannt:
- * FRG - Deutschland (Staatenkennung nur D-PLZ)
- * NL - Niederlande (Staatenkennung nur NL-PLZ)
- * USA
- * Canada
- * France
- * Belgium
- * Wird die Kennung nicht erkannt, wird eine deutsche Formattierung mit
- * ausgeschriebener Staatenkennung erzeugt. Im deutschen Formattierungs-
- * modul wird die Anrede "Herr" zu "Herrn" dekliniert. Im französisch-
- * belgischen Modul wird "Mlle." als "M\raisebox{0.5ex}{\scriptsize lle}"
- * gesetzt, analog "Mme.".
- *
- * Bugs:
- * - "SEARCHNEXT" in DFA scheint nicht vernuenftig zu funktionieren
- * - Das Skript arbeitet phantatstisch von der Shell, aber der Aufruf
- * aus WRITE selbts mittels "DoRexx" klappt nicht.
- *
- * Enhancements:
- * - Silent mode
- *
- * History:
- * v1.00 17.08.1993 - Grob lauffähig, kommentiert und dokumentiert
- * v1.01 17.08.1993 - DFA reagiert sauer auf 'SELECT QUERY', wenn noch
- * nichts selektiert wurde. Das wird nun abgefangen.
- * v1.02 22.09.1993 - an WRITE 3.0 angepaßt
- * v1.03 23.10.1993 - Staatenkennung NL eingebaut, allerdings ist die
- * Deklanation der Anrede derzeit unmoeglich, da ich
- * kein Niederlaendisch kann.
- * v1.04 31.10.1993 - Hollädische Anreden nun eingebaut, dank Raymond Penners,
- * Autor von PhoneBill, der mir die Briefanreden zusandte.
- *
- */
-
- /*
- * Check if WRITE and DFA are running
- */
-
- IF ~show('P',"WRITE")
- THEN DO
- say 'This script does not make sense without the "WRITE" editor !'
- exit 10
- END
-
- address 'WRITE'
-
- 'VERSIONCHECK 31090 "TeXAdr.wrx"'
- IF RC~=0 THEN DO
- exit 10
- END
-
- 'LockWindow _CurrentID'
- if (RC ~= 0)
- then do
- 'MessageOK "You should have a window!"'
- exit 10
- end
-
- IF ~show('P',"DFA")
- THEN DO
- address 'WRITE'
- 'MessageOK "DFA not found!"'
- 'LockWindow 0'
- exit 10
- END
-
- /*
- * Are there any selected entries in DFA?
- */
-
- selected=1
- address 'DFA'
- options results
- 'select query'
- if ((RESULT = 0) & (RC = 0))
- then do
- 'NEXTSEL'
- if (RC ~= 0)
- then do
- 'FIRST'
- 'NEXTSEL'
- if (RC ~= 0)
- then selected=0
- end
- end
- else do
- if (RC ~= 0) then selected=0
- end
-
- /*
- * A Blockmark in 'WRITE' overrides SELECT !
- */
-
- address 'WRITE'
- 'GETVAR "_MARKED"'
- if (RESULT = 2) then selected=0
- address 'DFA'
-
- if (selected ~= 0)
- then do
-
- /*
- * browse through selections
- */
-
- 'GETCURRENT stem ADR.'
- address 'WRITE'
- 'GETVAR "_XPOS"'
- a.x=RESULT
- 'GETVAR "_YPOS"'
- a.y=RESULT
- found='"Found:' ADR.ADDRESS.2 ADR.ADDRESS.1 '\n at:' ADR.ADDRESS.5||'"'
- cmd='ASK' found '"'||"_OK *|_Next ^"||'"'
- cmd
- 'GETVAR "_RN"'
- cnt=RESULT
-
- do while (cnt ~= 0)
- address 'DFA'
- 'NEXTSEL'
- if (RC ~= 0)
- then do
- address 'WRITE'
- 'MessageOK "No more entries selected!"'
- 'LockWindow 0'
- exit 5
- end
- 'GETCURRENT stem ADR.'
-
- address 'WRITE'
- found='"Found:' ADR.ADDRESS.2 ADR.ADDRESS.1 '\n at:' ADR.ADDRESS.5||'"'
- cmd='ASK' found '"'||"_OK *|_Next ^"||'"'
- say cmd
- cmd
- 'GETVAR "_RN"'
- cnt=RESULT
- end
-
- end
- else do
-
- /*
- * Seek for a fitting entry
- */
-
- address 'WRITE'
- options results
- 'GETVAR "_MARKED"'
-
- automark=0
-
- if (RESULT < 2)
- then do
-
- /*
- * No proper marked block, use current word
- */
-
- 'Unmark'
- 'SetMark'
- 'GETVAR "_MARKAX"'
- b.x=RESULT
- 'GETVAR "_MARKAY"'
- b.y=RESULT
- 'LastWord'
- 'SetMark'
- automark=1
- 'GETVAR "_MARKAX"'
- a.x=RESULT
- 'GETVAR "_MARKAY"'
- a.y=RESULT
-
- end
- else do
- 'GETVAR "_MARKAX"'
- a.x=RESULT
- 'GETVAR "_MARKAY"'
- a.y=RESULT
- 'GETVAR "_MARKBX"'
- b.x=RESULT
- 'GETVAR "_MARKBY"'
- b.y=RESULT
- end
-
- /*
- * Read all chars in marked block
- */
-
- pat=""
- 'GOTO' a.x a.y
- c.x=a.x
- c.y=a.y
- DO UNTIL (((c.x > b.x) & (c.y >= b.y)) | ((a.x >= b.x) & (a.y >= b.y)))
- 'GETVAR "_CURRENTCHAR"'
- pat=pat||RESULT
- 'CursorRight 1'
- 'GETVAR "_XPOS"'
- c.x=RESULT
- 'GETVAR "_YPOS"'
- c.y=RESULT
- END
-
- pat=strip(pat);
-
- /*
- * Marked blocks are considered to be exact, last words may be fragments
- */
-
- if (automark ~= 0)
- then pat="#?"||pat||"#?"
-
- /*
- * Search the current pattern
- */
-
- address 'DFA'
- options results
- 'search' pat 'ignorecase fields=all stem ADR.'
- if (RC ~= 0)
- then do
- address 'WRITE'
- msg=pat||' not found!'
- 'MessageOK "'||msg||'"'
- 'LockWindow 0'
- exit 5
- end
-
- address 'WRITE'
- found='"Found:' ADR.ADDRESS.2 ADR.ADDRESS.1 '\n at:' ADR.ADDRESS.5||'"'
- cmd='ASK' found '"'||"_OK *|_Next ^"||'"'
- cmd
- 'GETVAR "_RN"'
- cnt=RESULT
-
- /*
- * Search next occurence - anyhow, DFA seems to be in trouble with SEARCHNEXT
- */
-
- do while (cnt ~= 0)
- address 'DFA'
- 'searchnext stem ADR.'
- if (RC ~= 0)
- then do
- address 'WRITE'
- msg='No more matches for: '||pat
- 'MessageOK "'||msg||'"'
- 'LockWindow 0'
- exit 5
- end
-
- 'GetCurrent stem ADR.'
-
- address 'WRITE'
- found='"Found:' ADR.ADDRESS.2 ADR.ADDRESS.1 '\n at:' ADR.ADDRESS.5||'"'
- cmd='ASK' found '"'||"_OK *|_Next ^"||'"'
- say cmd
- cmd
- 'GETVAR "_RN"'
- cnt=RESULT
- end
-
- /*
- * Remove the bait from the text
- */
-
- address 'WRITE'
- 'DeleteBlock'
- 'GOTO' a.x a.y
- end
-
- /*
- * We have somehow found the address we like and have it in ADR.ADDRESS
- * now output it to WRITE according to the national address format and
- * TeX style formatting characters.
- */
-
- 'WriteChar 37'
- 'Return'
- 'Tab 1'
-
- select
- when ADR.ADDRESS.6="FRG"
- then do
- anrede=ADR.ADDRESS.0
- if (ADR.ADDRESS.0="Herr") then anrede="Herrn"
- anrede="An "||anrede
- 'WriteText "'||anrede||'\\%"'
- 'Return'
- 'WriteText "'||ADR.ADDRESS.2 ADR.ADDRESS.1||'\\%"'
- 'Return'
- 'WriteText "'||ADR.ADDRESS.3||'\\[1ex]%"'
- 'Return'
- 'WriteText "{\bf D-'||ADR.ADDRESS.4||'} '||ADR.ADDRESS.5||'"'
- end
- when ADR.ADDRESS.6="NL"
- then do
- anrede=ADR.ADDRESS.0
- if (ADR.ADDRESS.0="Heer") then anrede="De Heer"
- if (ADR.ADDRESS.0="Vrouw") then anrede="Mevrouw"
- if (ADR.ADDRESS.0="Juffrouw") then anrede="Mejuffrouw"
- 'WriteText "'||anrede||'\\%"'
- 'Return'
- 'WriteText "'||ADR.ADDRESS.2 ADR.ADDRESS.1||'\\%"'
- 'Return'
- 'WriteText "'||ADR.ADDRESS.3||'\\[1ex]%"'
- 'Return'
- 'WriteText "{\bf NL-'||ADR.ADDRESS.4||'} '||ADR.ADDRESS.5||'"'
- end
- when ((ADR.ADDRESS.6="France") | (ADR.ADDRESS.6="Belgium"))
- then do
- anrede=ADR.ADDRESS.0
- if (anrede = "Mlle.") then anrede="M\raisebox{0.5ex}{\scriptsize lle}"
- if (anrede = "Mme.") then anrede="M\raisebox{0.5ex}{\scriptsize me}"
- anrede="Pour "||anrede
- 'WriteText "'||anrede||'\\%"'
- 'Return'
- 'WriteText "{\sc '||ADR.ADDRESS.1||'}' ADR.ADDRESS.2||'\\%"'
- 'Return'
- 'WriteText "'||ADR.ADDRESS.3||'\\%"'
- 'Return'
- 'WriteText "{\bf '||ADR.ADDRESS.4||'} '||ADR.ADDRESS.5||'\\[1ex]%"'
- 'Return'
- 'WriteText "\underline{'||ADR.ADDRESS.6||'}"'
- end
- when ADR.ADDRESS.6="USA"
- then do
- anrede=ADR.ADDRESS.0
- anrede="To "||anrede
- 'WriteText "'||anrede||'\\%"'
- 'Return'
- 'WriteText "'||ADR.ADDRESS.2 ADR.ADDRESS.1||'\\%"'
- 'Return'
- 'WriteText "'||ADR.ADDRESS.3||'\\%"'
- 'Return'
- 'WriteText "'||ADR.ADDRESS.5||'\\[1ex]%"'
- 'Return'
- 'WriteText "'||ADR.ADDRESS.4 '\underline{USA}"'
- end
- when ADR.ADDRESS.6="Canada"
- then do
- anrede=ADR.ADDRESS.0
- anrede="To "||anrede
- 'WriteText "'||anrede||'\\%"'
- 'Return'
- 'WriteText "'||ADR.ADDRESS.2 ADR.ADDRESS.1||'\\%"'
- 'Return'
- 'WriteText "'||ADR.ADDRESS.3||'\\%"'
- 'Return'
- 'WriteText "'||ADR.ADDRESS.5||'\\[1ex]%"'
- 'Return'
- 'WriteText "\underline{Canada}' ADR.ADDRESS.4||'"'
- end
- otherwise do
- anrede=ADR.ADDRESS.0
- 'WriteText "'||anrede||'\\%"'
- 'Return'
- 'WriteText "'||ADR.ADDRESS.2 ADR.ADDRESS.1||'\\%"'
- 'Return'
- 'WriteText "'||ADR.ADDRESS.3||'\\%"'
- 'Return'
- 'WriteText "{\bf '||ADR.ADDRESS.4||'} '||ADR.ADDRESS.5||'\\[1ex]%"'
- 'Return'
- 'WriteText "\underline{'||ADR.ADDRESS.6||'}"'
- end
- end
-
- 'LockWindow 0'
- exit 0
-
-